using System;

namespace Microsoft.ApplicationBlocks.Updater
{
    public interface IUpdaterTask
    {
        /// <summary>
        /// The base folder where files will be downloaded.
        /// </summary>
        string DownloadFilesBase { get; }

        /// <summary>
        /// Gets the remove files base.
        /// </summary>
        string RemoteFilesBase { get; }

        /// <summary>
        /// An unique identifier for the UpdaterTask.
        /// </summary>
        Guid TaskId { get; }

        /// <summary>
        /// The current state of the UpdaterTask.
        /// <see cref="UpdaterTaskState"/>
        /// </summary>
        UpdaterTaskState State { get; set; }

        /// <summary>
        /// Getas the files of the task.
        /// </summary>
        string[] Files { get; }

        /// <summary>
        /// Gets the checksums of the different files of the task.
        /// </summary>
        string[] Checksums { get; }

        /// <summary>
        /// Gets and sets if the different files of the task have been 
        /// dowloaded.
        /// </summary>
        bool Downloaded { get; set; }

        /// <summary>
        /// Gets and sets the description of the task.
        /// </summary>
        string Description { get; set; }

        /// <summary>
        /// Gets and sets the product code.
        /// </summary>
        string ProductCode { get; set; }

        /// <summary>
        /// Gets and sets the version of the update task.
        /// </summary>
        string Version { get; set; }

        /// <summary>
        /// Initializes an existing UpdaterTask with the specified manifest.
        /// </summary>
        void Init();
    }
}